#include "mywidget.h"
#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    //创建工具栏
    this->setGeometry(350,200,600,405);//设置窗体大小、位置
    setWindowTitle("电子书阅读器");
    setWindowIcon(QIcon(":/images/rbook.png"));

    QToolBar *tbar =new  QToolBar(this);

    tbar->setMovable(false);//工具栏不可移动
    tbar->setIconSize(QSize(20, 20));//设置动作图标的尺寸
    tbar->setStyleSheet("background-color:rgb(199,237,204)");//背景色



    Display = new QTextEdit(this);
    Display->setReadOnly(true);

    Display->setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);//自动换行
    //布局（纵向）
    //设置文字行间距
    Display->setMaximumHeight(335);

    Rmenu = new QMenu(this);//创建右键菜单
    Rmenu->addAction(tr("保存  \tCtrl+S"), this, SLOT(SavePic()));//添加菜单动作
    Rmenu->addAction(tr("退出  \tALT+F4"), this, SLOT(close()));//添加菜单动作
    Rmenu->setStyleSheet("background-color:rgb(199,237,204)");//设置背景色



    openAction = new QAction(tr("&打开"), this);//打开动作
    openAction->setIcon(QIcon(":/images/open.png"));//图标
    openAction->setShortcut(QKeySequence(tr("Ctrl+O")));//热键
    tbar->addAction(openAction);//添加到工具栏
    tbar->addSeparator();      //添加分割线


    fonts = new QAction(tr("&字体"), this);//字体动作
    fonts->setIcon(QIcon(":/images/fonts.png"));//图标
    fonts->setShortcut(QKeySequence(tr("Ctrl+T")));//热键
    tbar->addAction(fonts);//添加到工具栏


    bookmark = new QAction(tr("&添加书签"), this);//添加书签
    bookmark->setIcon(QIcon(":/images/bookmarks.png"));//图标
    tbar->addAction(bookmark);//添加到工具栏

    tbar->addAction("  ");//添加到工具栏 设置间隔

    previous = new QAction(tr("&上一页"), this);//上一页
    previous->setIcon(QIcon(":/images/previous.png"));//图标
    tbar->addAction(previous);//添加到工具栏

    tbar->addAction("  ");//添加到工具栏 设置间隔

    nextd = new QAction(tr("&下一页"), this);//下一页
    nextd->setIcon(QIcon(":/images/next.png"));//图标
    tbar->addAction(nextd);//添加到工具栏
    tbar->addAction(" ");//添加到工具栏 设置间隔

    enlarges = new QAction(tr("&放大"), this);//放大
    enlarges->setIcon(QIcon(":/images/enlarge.png"));//图标
    enlarges->setShortcut(QKeySequence(tr("Ctrl+U")));//热键
    tbar->addAction(enlarges);//添加到工具栏

    narrow = new QAction(tr("&缩小"), this);//缩小
    narrow->setIcon(QIcon(":/images/narrow.png"));//图标
    narrow->setShortcut(QKeySequence(tr("Ctrl+D")));//热键
    tbar->addAction(narrow);//添加到工具栏

    tbar->addAction(" ");//添加到工具栏 设置间隔

    clearbook = new QAction(tr("&清空书签"), this);//清空书签
    clearbook->setIcon(QIcon(":/images/clear.png"));//图标
    tbar->addAction(clearbook);//添加到工具栏

    fontcolor = new QAction(tr("&字体颜色"), this);//字体颜色
    fontcolor->setIcon(QIcon(":/images/fontcolor.png"));//图标
    tbar->addAction(fontcolor);//添加到工具栏

    closefile = new QAction(tr("&关闭电子书"), this);//关闭电子书
    closefile->setIcon(QIcon(":/images/closefile.png"));//图标
    tbar->addAction(closefile);//添加到工具栏

    tbar->addAction(" ");//添加到工具栏 设置间隔

    booklist = new QAction(tr("&书签列表"), this);//书签列表
    booklist->setIcon(QIcon(":/images/booklist1.png"));//图标
    tbar->addAction(booklist);//添加到工具栏

    QWidget* spacer= new QWidget();
    spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    tbar->addWidget(spacer);
    bookmarklist=new QComboBox(spacer);   //设置书签下拉列表
    spacer->setFixedHeight(20);



    connect(openAction, &QAction::triggered, this, &MyWidget::openBook);   //打开电子书
    connect(closefile, &QAction::triggered, this, &MyWidget::closeBook);   //关闭电子书
    connect(fonts, &QAction::triggered,this,&MyWidget::setwType);          //设置字体
    connect(fontcolor,&QAction::triggered,this,&MyWidget::setColor);       //设置字体颜色
    connect(enlarges,&QAction::triggered,this,&MyWidget::texplus);         //设置文本放大
    connect(narrow,&QAction::triggered,this,&MyWidget::reduce);            //设置文本减小
    connect(previous,&QAction::triggered,this,&MyWidget::previousu);  //下一页
    connect(nextd,&QAction::triggered,this,&MyWidget::nextp);     //上一页
    connect(bookmark,&QAction::triggered,this,&MyWidget::saveMark);  //保存书签
    connect(booklist,&QAction::triggered,this,&MyWidget::openmark);  //打开书签
    connect(clearbook,&QAction::triggered,this,&MyWidget::clearmark); //清空书签

    valtime=new QLabel(this);  //显示时间栏

    QVBoxLayout *v = new QVBoxLayout();
    v->addWidget(tbar);
    v->addWidget(Display);
    v->addWidget(valtime);
    this->setLayout(v);
    //没打开文件前，全部失能
    fonts->setEnabled(false);         //字体设置失能
    bookmark->setEnabled(false);      //添加书签失能
    previous->setEnabled(false);      //上一页失能
    nextd->setEnabled(false);         //下一页失能
    enlarges->setEnabled(false);        //放大失能
    narrow->setEnabled(false);       //缩小失能
    clearbook->setEnabled(false);     //清空书签失能
    fontcolor->setEnabled(false);      //字体颜色失能
    closefile->setEnabled(false);     //关闭电子书失能
    booklist->setEnabled(false);      //设置进入书签失能
    bookmarklist->setEnabled(false);  //书签下拉列表失能

    //时间显示初始化
    QTimer *timer=new QTimer(this);
    timer->start(1000); // 每次发射timeout信号时间间隔为1秒
    //connect(timer,SIGNAL(timeout()),this,SLOT(getTime()));
    connect(timer,&QTimer::timeout,this,&MyWidget::getTime);
}
void MyWidget::openBook()
{
    filepath = QFileDialog::getOpenFileName(this, "Open File", "/home/chaochao", "All (*.*);;text (*.txt);;c文件 (*.c *.cc *.cpp)PDF (*.pdf);;word (*.doc)");
    openFile(filepath, 0);
}
//打开文件
void MyWidget::openFile(QString filepath, int x)
{
    QFile file;
    file.setFileName(filepath);
    if (file.isOpen())
        file.close();
    file.open(QIODevice::ReadOnly);
    QTextStream stream(&file);
   // stream.setCodec("GB2312");
    Display->setPlainText(stream.readAll());
    file.close();

    num=12;
    ft.setPointSize(num);   //设置文本字体默认12大小
    Display->setFont(ft);//这个只能设置所有的内容为同样的大小

    QScrollBar *n = Display->verticalScrollBar();
    n->setValue(x);
    lineCount = Display->document()->lineCount();
    qDebug()<<"行数："<<lineCount;    //获取小说行数

    fonts->setEnabled(true);         //字体设置使能
    bookmark->setEnabled(true);      //添加书签使能
    previous->setEnabled(true);      //上一页使能
    nextd->setEnabled(true);         //下一页使能
    enlarges->setEnabled(true);      //放大使能
    narrow->setEnabled(true);       //缩小使能
    clearbook->setEnabled(true);     //清空书签使能  、、
    fontcolor->setEnabled(true);      //字体颜色使能
    closefile->setEnabled(true);     //关闭电子书使能
    bookmarklist->setEnabled(true);  //书签列表使能、、
}

//设置DisolayText字体
void MyWidget::setwType()
{
    bool ok;
    ft=QFontDialog::getFont(&ok);
    if (ok)
    {
        Display->setFont(ft);
    }
    else
    {
        QMessageBox::warning(this, "Warning", "设置字体失败", QMessageBox::Ok);
    }
}
//设置字体颜色
void MyWidget::setColor()
{
    QColor Color = QColorDialog::getColor();
    if (Color.isValid())
    {
        Display->setTextColor(QColor(Color));
    }
    else
    {
        QMessageBox::warning(this, "Warning", "设置颜色失败", QMessageBox::Ok);
    }
}
//设置文本放大
 void MyWidget::texplus()
 {
     num++;
     ft.setPointSize(num);   //设置文本字大小
     if(num>=72)
     {num=72;}
     Display->setFont(ft);//这个只能设置所有的内容为同样的大小
     lineCount = Display->document()->lineCount();
     qDebug()<<"行数："<<lineCount;
 }
//设置文本缩小
 void MyWidget::reduce()
 {
     num--;
     ft.setPointSize(num);   //设置文本字大小
     if(num<=6)
     {num=6;}
     Display->setFont(ft);//这个只能设置所有的内容为同样的大小
 }
//上一页
void MyWidget::previousu()
{
    SBn = Display->verticalScrollBar();
    m= SBn->value();
    SBn->setValue((m-320) > SBn->minimum() ? (m-320) : SBn->minimum());
}
//下一页
void MyWidget::nextp()
{
    SBn = Display->verticalScrollBar();
    m = SBn->value();
    SBn->setValue((m+320) < SBn->maximum() ? (m+320) : SBn->maximum());

}


//保存书签
void MyWidget::saveMark()
{
    cbnum +=1;
    if(cbnum>8)
        cbnum=1;

    if(cbnum==0)
     bookmarklist->setEnabled(false);
    if(cbnum>0)
    {
        booklist->setEnabled(true);   //设置进入书签使能
        bookmarklist->setEnabled(true);
       SBn = Display->verticalScrollBar();
       savevalue=SBn->value();  //保存书签
       qDebug()<<savevalue;
       switch (cbnum)
       {
         case 1:
          bookmarklist->addItem("书签1"); b1=savevalue; break;
         case 2:
          bookmarklist->addItem("书签2"); b2=savevalue; break;
         case 3:
          bookmarklist->addItem("书签3"); b3=savevalue; break;
         case 4:
          bookmarklist->addItem("书签4"); b4=savevalue; break;
         case 5:
          bookmarklist->addItem("书签5"); b5=savevalue; break;
         case 6:
          bookmarklist->addItem("书签6"); b6=savevalue; break;
         case 7:
          bookmarklist->addItem("书签7"); b7=savevalue; break;
         case 8:
          bookmarklist->addItem("书签8"); b8=savevalue; break;
         default:
          break;
       }
      QMessageBox::information(this,"提醒", "添加成功!",  QMessageBox::Ok);
   }
}
//打开书签
void MyWidget::openmark()
{
      if(bookmarklist->currentText()=="书签1")
        { SBn->setValue(b1);}
      else if (bookmarklist->currentText()=="书签2")
        { SBn->setValue(b2); }
      else if (bookmarklist->currentText()=="书签3")
        { SBn->setValue(b3); }
      else if (bookmarklist->currentText()=="书签4")
        { SBn->setValue(b4); }
      else if (bookmarklist->currentText()=="书签5")
        { SBn->setValue(b5); }
      else if (bookmarklist->currentText()=="书签6")
        { SBn->setValue(b6); }
      else if (bookmarklist->currentText()=="书签7")
        { SBn->setValue(b7); }
      else if (bookmarklist->currentText()=="书签8")
        { SBn->setValue(b8); }
      else
        QMessageBox::information(this,"提醒", "书签未建立!",  QMessageBox::Ok);
}
//关闭文件
void MyWidget::closeBook()
{
    Display->clear();                 //关闭文件
    fonts->setEnabled(false);         //字体设置失能
    bookmark->setEnabled(false);      //添加书签失能
    previous->setEnabled(false);      //上一页失能
    nextd->setEnabled(false);         //下一页失能
    enlarges->setEnabled(false);        //放大失能
    narrow->setEnabled(false);       //缩小失能
    clearbook->setEnabled(false);     //清空书签失能
    fontcolor->setEnabled(false);      //字体颜色失能
    closefile->setEnabled(false);     //关闭电子书失能
    booklist->setEnabled(false);      //设置进入书签失能
    bookmarklist->setEnabled(false);  //书签下拉列表失能
    cbnum=0;
    bookmarklist->clear();
}
//清空书签
void MyWidget::clearmark()
{
    cbnum=0;
    bookmarklist->clear();
    booklist->setEnabled(false);      //设置进入书签失能
    bookmarklist->setEnabled(false);  //书签下拉列表失能

}
void MyWidget::getTime()
{
    QString nowtime;
    QDateTime time = QDateTime::currentDateTime();
    nowtime = time.toString("yyyy-MM-dd hh:mm:ss dddd");
    valtime->setText(nowtime);
    valtime->setAlignment(Qt::AlignCenter);
}

MyWidget::~MyWidget()
{

}
